package models

import "time"

// Response 通用响应格式
type Response struct {
	Code      int         `json:"code"`
	Message   string      `json:"message"`
	Data      interface{} `json:"data"`
	Timestamp string      `json:"timestamp"`
}

// NewResponse 创建通用响应
func NewResponse(message string, data interface{}) *Response {
	return &Response{
		Code:      200,
		Message:   message,
		Data:      data,
		Timestamp: time.Now().UTC().Format("2006-01-02T15:04:05Z"),
	}
}

// ErrorResponse 错误响应格式
type ErrorResponse struct {
	Code      int    `json:"code"`
	Message   string `json:"message"`
	Error     string `json:"error"`
	Timestamp string `json:"timestamp"`
}

// NewErrorResponse 创建错误响应
func NewErrorResponse(code int, message, error string) *ErrorResponse {
	return &ErrorResponse{
		Code:      code,
		Message:   message,
		Error:     error,
		Timestamp: time.Now().UTC().Format("2006-01-02T15:04:05Z"),
	}
}

// PageData 页面数据模型
type PageData struct {
	Page       string     `json:"page"`
	Categories []Category `json:"categories"`
}

// CategoryWithItems 分类及其项目
type CategoryWithItems struct {
	Category Category `json:"category"`
	Items    []Item   `json:"items"`
}

// ContentListItem 内容列表项
type ContentListItem struct {
	Id          int       `json:"id"`
	Name        string    `json:"name"`              // 文件名(不含扩展名)
	UpdateTime  time.Time `json:"updateTime"`        // 更新时间
	IsDirectory bool      `json:"isDirectory"`       // 是否是目录
	Content     string    `json:"content,omitempty"` // 文件内容，可选
}

// ContentData 内容数据
type ContentData struct {
	Content    string    `json:"content"`    // 内容
	UpdateTime time.Time `json:"updateTime"` // 更新时间
}

// ContentResponse 内容响应
type ContentResponse struct {
	Code int          `json:"code"`
	Data *ContentData `json:"data"`
}

// NewContentResponse 创建内容响应
func NewContentResponse(data *ContentData) *ContentResponse {
	return &ContentResponse{
		Code: 200,
		Data: data,
	}
}

// ContentListResponse 内容列表响应
type ContentListResponse struct {
	Code int                `json:"code"`
	Data []*ContentListItem `json:"data"`
}

// NewContentListResponse 创建内容列表响应
func NewContentListResponse(data []*ContentListItem) *ContentListResponse {
	return &ContentListResponse{
		Code: 200,
		Data: data,
	}
}

// UpdateContentRequest 更新内容请求
type UpdateContentRequest struct {
	Id      int    `json:"id"`      // 内容ID
	Content string `json:"content"` // 文件内容
}
